package com.bmob.lover.ui.fragment

import android.graphics.Bitmap
import android.os.Bundle
import android.view.KeyEvent
import android.view.View
import android.view.ViewGroup
import android.webkit.WebResourceRequest
import android.webkit.WebView
import android.widget.LinearLayout
import com.just.agentweb.*
import com.theone.common.constant.BundleConstant
import com.theone.common.ext.getValueNonNull
import com.theone.common.ext.logI
import com.theone.common.ext.startWebView
import com.bmob.lover.R
import com.bmob.lover.data.model.bean.lol.LOLArticle
import com.bmob.lover.databinding.ActivityWebBinding
import com.theone.mvvm.base.viewmodel.BaseViewModel
import com.theone.mvvm.core.base.fragment.BaseCoreFragment


//  ┏┓　　　┏┓
//┏┛┻━━━┛┻┓
//┃　　　　　　　┃
//┃　　　━　　　┃
//┃　┳┛　┗┳　┃
//┃　　　　　　　┃
//┃　　　┻　　　┃
//┃　　　　　　　┃
//┗━┓　　　┏━┛
//    ┃　　　┃                  神兽保佑
//    ┃　　　┃                  永无BUG！
//    ┃　　　┗━━━┓
//    ┃　　　　　　　┣┓
//    ┃　　　　　　　┏┛
//    ┗┓┓┏━┳┓┏┛
//      ┃┫┫　┃┫┫
//      ┗┻┛　┗┻┛
/**
 * @author The one
 * @date 2021-08-05 16:49
 * @describe TODO
 * @email 625805189@qq.com
 * @remark
 */

class WebFragment private constructor(): BaseCoreFragment<BaseViewModel, ActivityWebBinding>() {

    companion object {
        fun newInstance(data: LOLArticle): WebFragment {
            return WebFragment().apply {
                arguments = Bundle().apply {
                    putParcelable(BundleConstant.DATA, data)
                }
            }
        }
    }

    private val mWeb: LOLArticle by getValueNonNull(BundleConstant.DATA)
    private lateinit var mAgentWeb: AgentWeb

    override fun initView(root: View) {
        getTopBar()?.run {
            setTitle(mWeb.getWebTitle())
            addLeftBackImageButton().setOnClickListener {
                if(!mAgentWeb.back()){
                    finish()
                }
            }
            addRightImageButton(R.drawable.mz_titlebar_ic_more_dark,R.id.topbar_right_view).setOnClickListener {
                startWebView(mWeb.articleUrl)
            }
        }
        "$TAG  ${mWeb.articleUrl}".logI()
        mAgentWeb = AgentWeb.with(this) //
            .setAgentWebParent(
                getDataBinding().content,
                -1,
                LinearLayout.LayoutParams(
                    ViewGroup.LayoutParams.MATCH_PARENT,
                    ViewGroup.LayoutParams.MATCH_PARENT
                )
            ) //传入AgentWeb的父控件。
            .useDefaultIndicator(-1, 3) //设置进度条颜色与高度，-1为默认值，高度为2，单位为dp。
            .setWebViewClient(mWebViewClient) //WebViewClient ， 与 WebView 使用一致 ，但是请勿获取WebView调用setWebViewClient(xx)方法了,会覆盖AgentWeb DefaultWebClient,同时相应的中间件也会失效。
            .setWebChromeClient(mWebChromeClient) //WebChromeClient
            .setSecurityType(AgentWeb.SecurityType.STRICT_CHECK) //严格模式 Android 4.2.2 以下会放弃注入对象 ，使用AgentWebView没影响。
            .setMainFrameErrorView(
                R.layout.agentweb_error_page,
                -1
            ) //参数1是错误显示的布局，参数2点击刷新控件ID -1表示点击整个布局都刷新， AgentWeb 3.0.0 加入。
            .setOpenOtherPageWays(DefaultWebClient.OpenOtherPageWays.ASK) //打开其他页面时，弹窗质询用户前往其他应用 AgentWeb 3.0.0 加入。
            .interceptUnkownUrl() //拦截找不到相关页面的Url AgentWeb 3.0.0 加入。
            .createAgentWeb() //创建AgentWeb。
            .ready() //设置 WebSettings。
            .go(mWeb.articleUrl)

    }


    private val mWebViewClient: WebViewClient = object : WebViewClient() {
        override fun shouldOverrideUrlLoading(
            view: WebView?,
            request: WebResourceRequest?
        ): Boolean {
            request?.let {
                if(it.url.toString().contains("https://lol.qq.com/app/m/select_app.shtml")){
                    return true
                }
            }
            return super.shouldOverrideUrlLoading(view, request)
        }

        override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) {
            //do you  work
        }

        override fun shouldOverrideUrlLoading(view: WebView?, url: String?): Boolean {
            return super.shouldOverrideUrlLoading(view, url)
        }

    }
    private val mWebChromeClient: WebChromeClient = object : WebChromeClient() {

        override fun onReceivedTitle(view: WebView?, title: String?) {
            super.onReceivedTitle(view, title)

        }

    }

    override fun createObserver() {

    }

    override fun onResume() {
        mAgentWeb.webLifeCycle.onResume()
        super.onResume()
    }


    override fun onPause() {
        mAgentWeb.webLifeCycle.onPause()
        super.onPause()
    }

    override fun onDestroyView() {
        mAgentWeb.webLifeCycle.onDestroy()
        super.onDestroyView()
    }

    override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
        return  mAgentWeb.handleKeyEvent(keyCode,event)
    }

}